package org.carry.god.framework.common.exception;

import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.EqualsAndHashCode;

/**
 * 业务逻辑异常
 *
 * @author wanglei
 */
@Data
@EqualsAndHashCode(callSuper = true)
@AllArgsConstructor
public final class ServiceException extends RuntimeException {
    /**
     * 业务错误码定义
     *
     * <p>本错误码设计用于标识业务级别的异常情况，<br>
     * 采用10位数字编码，分为四个段落：</p>
     *
     * <ol>
     *     <li><b>类型标识 (1位)</b><br>
     *         1 - 表示业务级别异常<br>
     *         x - 保留，用于未来扩展
     *     </li>
     *     <li><b>系统类型 (2位)</b><br>
     *         01 - 用户系统<br>
     *         ... - 其他系统类型
     *     </li>
     *     <li><b>模块标识 (3位)</b><br>
     *         规则不限，但建议进一步细分。例如，在用户系统中：<br>
     *         &nbsp;&nbsp;&nbsp;&nbsp;001 - OAuth2 模块<br>
     *         &nbsp;&nbsp;&nbsp;&nbsp;002 - User 模块
     *     </li>
     *     <li><b>具体错误码 (3位)</b><br>
     *         规则不限，推荐每个模块内的错误码依次递增。
     *     </li>
     * </ol>
     *
     * <p>注意：模块 system 的错误码区间为 [1-01-000-000, 1-02-000-000)。</p>
     */
    private final Integer code;
    /**
     * 错误提示
     */
    private final String message;
}
